/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.cje.toolkit;

import com.chframework.common.exception.UtilityException;
import com.chframework.common.extend.ReactorHelper;
import com.cje.constant.DefaultConstant;
import com.cje.basic.pojo.bo.LoginUserBO;
import com.cje.toolkit.support.JwtKit;
import org.springframework.lang.NonNull;
import reactor.core.publisher.Mono;

public class FluxSessionUserUtils {

    /**
     * 获取当前登录账号名
     */
    public static Mono<LoginUserBO> getCurrentVisitor() {
        return ReactorHelper.getRequest()
                .map(JwtKit::getRequestHeaderToken)
                .flatMap(JwtKit::getLoginUser)
                .onErrorResume(e -> Mono.error(new UtilityException(e)));
    }

    /**
     * 后端线程执行无状态的任务时，使用默认账户。
     */
    @NonNull
    public static Mono<LoginUserBO> getDefaultVisitor() {
        return Mono.defer(() ->
                        Mono.fromSupplier(() -> {
                            LoginUserBO authLoginBO = new LoginUserBO();
                            authLoginBO.setUserId(DefaultConstant.DEFAULT_USER_ID);
                            authLoginBO.setUsername(DefaultConstant.DEFAULT_USER_NAME);
                            return authLoginBO;
                        })
                )
                .onErrorResume(e -> Mono.error(new UtilityException(e)));
    }

}
